
let fun = function(x:string,y:number):string{
    return x + y
}
console.log(fun('Ss',666));

// 完整写法
// 关键字 变量名：数据类型 = 变量值
// 在函数当中规定数据类型，主要规定的是形参的数据类型和返回值的数据类型
// let boo : (x:string,y:number) => string = function(x:string,y:number):string{
//     return x + y;
// }
// console.log(boo('212',223));
let boo2: (x: string, y: number) => string = function (x: string, y: number): string {
    return x + y;
}
console.log(boo2('145', 456));

function boo1(x:string,y:string,z?:string):string{
    return x+y+z

}
console.log(boo1("a","b"));
console.log(boo1('a','b',"z")); 
// 形参后面加?：是该参数可传可不传，传入 就是该值，不传就会默认传入undefined



function boo3(x:string,y:string = 'zheshu'):string{
    console.log(y);
    return x + y
}
console.log(boo3('3'))
console.log(boo3('2','3'))
// / ts当中使用形参默认值，意思该参数可传入可不传入，传入使用传入的新值，不传入也不会报错，使用形参默认值

function boo4(x: string, y: string, ...ars: string[]): string {
    console.log(ars); //传的是一个空字符串
    return x + y;
}

console.log(boo4('1', '2'));
console.log(boo4('1', '2', '3', '4')); //传值后12 [34]


//函数用接口规定

//函数调用签名
interface Fun{
    (x:string,y:string):string // 接口可以描述函数的数据类型（参数的数据类型和返回值的数据类型）
}
let yangyang: Fun = function (x: string, y: string): string {
    return x + y;
}
console.log(yangyang('a', 'b'));


// 接口可以规定对象 、函数、类的数据类型





